package cn.iocoder.yudao.module.im.service.message;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.im.controller.app.message.vo.AppMessagePageReqVO;
import cn.iocoder.yudao.module.im.controller.app.message.vo.AppMessageReadReqVO;
import cn.iocoder.yudao.module.im.controller.app.message.vo.AppMessageRespVO;
import cn.iocoder.yudao.module.im.controller.app.message.vo.AppMessageSendReqVO;
import cn.iocoder.yudao.module.im.controller.app.message.vo.AppMessageSendRespVO;
import cn.iocoder.yudao.module.im.controller.app.message.vo.AppMessageUndoReqVO;
import cn.iocoder.yudao.module.im.dal.dataobject.message.MessageDO;

/**
 * 消息 Service 接口
 *
 * @author 芋道源码
 */
public interface MessageService {

    /**
     * 发送消息
     *
     * @param userId 发送者用户ID
     * @param sendReqVO 发送消息请求
     * @return 发送消息响应
     */
    AppMessageSendRespVO sendMessage(Long userId, AppMessageSendReqVO sendReqVO);

    /**
     * 获取消息分页列表
     *
     * @param userId 当前用户ID
     * @param pageReqVO 分页查询请求
     * @return 消息分页列表
     */
    PageResult<AppMessageRespVO> getMessagePage(Long userId, AppMessagePageReqVO pageReqVO);

    /**
     * 设置消息已读
     *
     * @param userId 当前用户ID
     * @param readReqVO 已读请求
     */
    void readMessage(Long userId, AppMessageReadReqVO readReqVO);

    /**
     * 撤回消息
     *
     * @param userId 当前用户ID
     * @param undoReqVO 撤回请求
     * @return 撤回后的消息
     */
    AppMessageRespVO undoMessage(Long userId, AppMessageUndoReqVO undoReqVO);

    /**
     * 创建消息
     *
     * @param messageDO 消息DO
     * @return 消息ID
     */
    Long createMessage(MessageDO messageDO);

    /**
     * 获得消息
     *
     * @param id 编号
     * @return 消息
     */
    MessageDO getMessage(Long id);

}